﻿Imports ComponentFactory.Krypton.Toolkit
Imports System.Data.OleDb
Imports System.Runtime.InteropServices

Public Class ConsultaProduto
    Inherits KryptonForm

    Private conexao As OleDbConnection
    Private command As OleDbCommand
    Private dataSet As DataSet
    Private dataView As DataView
    Private dataAdapter As OleDbDataAdapter
    Private cmdBuilder As OleDbCommandBuilder
    Private strQueryProduto As String = "SELECT codProduto AS Código" & _
                                        ", nomeProduto AS Nome" & _
                                        ", tblMarcaProduto.descricaoMarcaProduto AS Marca" & _
                                        ", loteProduto AS Lote" & _
                                        ", descricaoProduto AS Descrição " & _
                                        ", precoProduto AS Preço" & _
                                        ", quantidadeProduto AS Quantidade" & _
                                        ", tblFornecedor.nomeFornecedor AS Fornecedor" & _
                                        ", quantidadedeestoqueProduto AS Estoque" & _
                                        " FROM ((tblProduto" & _
                                        " LEFT JOIN tblMarcaProduto ON tblMarcaProduto.codMarcaProduto = tblProduto.codMarcaProduto)" & _
                                        " LEFT JOIN tblFornecedor ON tblFornecedor.codFornecedor = tblProduto.codFornecedor)"

    Private strTipoFiltro = Nothing

    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.

        strTipoFiltro = "Nome like '%{0}%'"

        cbfiltro.SelectedIndex = 0

        conexao = FabricaDeConexoes.CriarConexao()
        dataSet = New DataSet()

        carregarProduto()

    End Sub

    Private Sub carregarProduto()
        Try
            If (dataSet IsNot Nothing) Then
                dataAdapter = New OleDbDataAdapter(strQueryProduto, conexao)
                dataSet = New DataSet()
                dataAdapter.Fill(dataSet, "tblProduto")

                dataView = New DataView(dataSet.Tables("tblProduto"), Nothing, "Código", DataViewRowState.CurrentRows)

                dtgProduto.DataSource = dataView
                dtgProduto.Columns(0).Visible = False
            End If

        Catch ex As Exception
            Debug.WriteLine(ex)
        End Try
        
    End Sub

    Private Sub btnFechar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFechar.Click
        Me.Dispose()
    End Sub

    Private Sub btnNovo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNovo.Click
        Try
            Dim frmcad As New CadastroProduto()
            frmcad.ShowDialog()
            carregarProduto()
        Catch ex As Exception
            Debug.WriteLine(ex.StackTrace)
        End Try
    End Sub

    Private Sub cbFiltro_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbfiltro.SelectedIndexChanged

        txtFiltrar.Clear()
        txtFiltrar.Focus()

        Select Case (cbfiltro.SelectedItem.ToString())

            Case "Nome"
                strTipoFiltro = "Nome like '%{0}%'"
            Case "Marca"
                strTipoFiltro = "Marca like '%{0}%'"

            Case Else
                strTipoFiltro = Nothing

        End Select

    End Sub

    Private Sub txtFiltrar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFiltrar.TextChanged
        dataView.RowFilter = String.Format(strTipoFiltro, txtFiltrar.Text)
    End Sub

    Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click

        Try
            Dim queryProduto As String = "DELETE * FROM tblProduto WHERE tblProduto.codProduto = " & dtgProduto.CurrentRow.Cells(0).Value

            'Abre conexão e exclui 
            command = New OleDbCommand(queryProduto, conexao)
            conexao.Open()
            command.ExecuteNonQuery()

            'Faz a atualização do DataSet (esvazia e preenche novamente)
            cmdBuilder = New OleDbCommandBuilder(dataAdapter)
            dataSet.Tables("tblProduto").Clear()
            dataAdapter.Update(dataSet, "tblProduto")

            'Atualiza o DataGridView
            carregarProduto()
        Catch ex As OleDbException
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            command.Dispose()
            conexao.Close()
        End Try

    End Sub

    Private Sub btnEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditar.Click
        If (dtgProduto.CurrentRow IsNot Nothing) Then
            Dim frm As New CadastroProduto(dtgProduto.CurrentRow.Cells.Item(0).Value)
            frm.ShowDialog()
            Dim cmdBuilder As New OleDbCommandBuilder(dataAdapter)
            dataAdapter.Update(dataSet, "tblProduto")
            carregarProduto()
        Else
            KryptonMessageBox.Show("Não há nenhum registro selecionado para edição.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub
End Class